<?php

//direccion completa del sitio

//Check $_ENV["OS"]
//Foolish comparison :P. Is too late sorry.
if (DIRECTORY_SEPARATOR=='/')
	{
	//DEV PATH (GNU/LINUX)
	define("PATH" , "http://". str_replace( $_SERVER["DOCUMENT_ROOT"], $_SERVER["HTTP_HOST"] . '/', ROOT) . "/");
	}
else
	{
	//INSTALATION PATH (WINDOWS)
	$NEW_WWW_ROOT=str_replace(DIRECTORY_SEPARATOR,'/',WWW_ROOT);
	define("PATH", "http://".$_SERVER["SERVER_NAME"].str_replace($_SERVER["DOCUMENT_ROOT"],'',$NEW_WWW_ROOT));
	}


define ("PATH_IMAGE", PATH . "img/");

define ("PATH_IMAGE_MENU", PATH_IMAGE . "menu/");
define ("PATH_IMAGE_SUBMENU", PATH_IMAGE . "submenu/");

//Path para los archivos
define ("PATH_FILES", WWW_ROOT . "files/");
define ("PATH_FILES_URL", PATH . "files/");

define ("JS_URL_ABSOLUTE", PATH . "js/");

define ("SWF_URL_ABSOLUTE", PATH . "swf/");

define ("PATH_CONFIG_INI",PATH_FILES."config.ini");


class AppController extends Controller
{
	var $helpers = array('Html', 'Javascript');
//	var $components = array('ModelLoader');
	

	/*
	 * @return array || vector || string
	 * @param $seccion String [optional]
	 * @param $subseccion String [optional]
	 */
	function getConfigIni($seccion = null, $subseccion = null) 
	{
		$archivoini=parse_ini_file(PATH_CONFIG_INI,true);
		if (empty($seccion) && empty($subseccion)) {
			$ret=$archivoini;
		}
		else {
			if (!empty($seccion) && empty($subseccion)) {
				$ret=$archivoini["$seccion"];
			}
			else {
				$ret=$archivoini["$seccion"]["$subseccion"];
			}
		}
		return $ret;		
	}
	
    function checkSession()
    {
        //Si la información de sesión no ha sido definida...
        if (!$this->Session->check('User'))
        {
            //Forza al usuario a iniciar sesión
            $this->redirect('/users/login');
            exit();
        }
    }
    
	/* Esta funcion convierte un formato fecha d-m-Y a Y-m-d.
	 * 
	 * @param $date string fecha en formato d-m-Y
	 * @return date string en formato Y-m-d
	 */
    function convertDmyToYmd($date){
		$aFecha = split('-',$date);
		$nuevaFecha = $aFecha[2].'-'.$aFecha[1].'-'.$aFecha[0];
		return $nuevaFecha;
    }
	
	
	////////////////////////////////////////////////////////////////////////////////////////////////////
	
	/**
	 * Function que retorna la fecha del ultimo dia del mes de la fecha pasada
	 * @return date "Y-m-d"
	 * @param $fecha date "d-m-Y" && "Y-m-d"
	 */
	function ultimoDia($dFecha){
		
		//int mktime  ([ int $hora  [, int $minuto  [, int $segundo  [, int $mes  [, int $dia  [, int $anyo  [, int $es_dst  ]]]]]]] )
		$aVar = explode("-",$dFecha);
		$iMes = $aVar[1];
		if($aVar[0]>31){
			$iAnio = $aVar[0];
			$iDia = $aVar[2];
			$sFormato = 'Y-m-d';
		}
		else{
			$iAnio = $aVar[2];
			$iDia = $aVar[0];			
			$sFormato = 'd-m-Y';
		}
		return date($sFormato, mktime(0, 0, 0, $iMes + 1, 0, $iAnio));
		
		
		//convierte la fecha en la fecha del ultimo dia de ese mes
		/*$fecha = explode('-',$fecha);
		$dia = $fecha[0];
		$mes = $fecha[1];
		$anio = $fecha[2];
		echo "dia $dia mes $mes anio $anio <br />";
		if($dia>31){
			$tmp = $dia;
			$dia = $anio;
			$anio = $tmp;
		}
		
		$dia = cal_days_in_month(CAL_GREGORIAN,$mes,$anio);
		$fecha = $anio."-".$mes."-".$dia;
		return $fecha;*/
	}

	////////////////////////////////////////////////////////////////////////////////////////////////////
	
	/**
	 * Function que agrega un mes a una fecha dada
	 * @return date "Y-m-d" | d-m-y
	 * @param $fecha date "Y-m-d | d-m-y" dependiendo del ingreso de los datos
	 */
	function agregarMes($dFecha, $iMeses=1)
	{

		//int mktime  ([ int $hora  [, int $minuto  [, int $segundo  [, int $mes  [, int $dia  [, int $anyo  [, int $es_dst  ]]]]]]] )
		$aVar = explode("-",$dFecha);
		$iMes = $aVar[1];
		if($aVar[0]>31){
			$iAnio = $aVar[0];
			$iDia = $aVar[2];
			$sFormato = 'Y-m-d';
		}
		else{
			$iAnio = $aVar[2];
			$iDia = $aVar[0];			
			$sFormato = 'd-m-Y';
		}
		
		//si es el ultimo dia va al mes siguiente tambien ultimo dia
		if(cal_days_in_month(CAL_GREGORIAN,$iMes,$iAnio)==$iDia){
			
			$iMes+=$iMeses;
			
			if($iMes>12){
				$iAnio += (int)($iMes/12); 
				$iMes = $iMes%12;
			}
			elseif($iMes<1){
				$iAnio -= (int)(($iMes-1)/12+1);
				$iMes = 12 + $iMes%12;
			}
			
			$diasNext = cal_days_in_month(CAL_GREGORIAN,$iMes,$iAnio);
			return date($sFormato, mktime(0, 0, 0, $iMes, $diasNext, $iAnio));
		}
		else{
			$dTmp = date($sFormato, mktime(0, 0, 0, $iMes+$iMeses+1, 0, $iAnio));
			$aVar = explode("-",$dTmp);
			$iMes = $aVar[1];
			if($aVar[0]>31){
				$iAnio = $aVar[0];
			}
			else{
				$iAnio = $aVar[2];
			}
			return date($sFormato, mktime(0, 0, 0, $iMes, $iDia, $iAnio));
		}
				
	}
	
	/*
	 * Funcion que saca la diferencia entre 2 fechas, y retorna esa diferencia en dias
	 * 
	 * @param $fecha1 string formato: Y-m-d. Fecha mayor
	 * @param $fecha2 string formato: Y-m-d. Fecha menor
	 * @return int dias.
	 */
	function diferenciaDias($fecha1, $fecha2) 
	{
		//obtiene cuantos meses faltan cerrar: iCantMeses
		//defino fecha 1
		$aTmp = explode('-',$fecha1);
		$anio1 = $aTmp[0];
		$mes1 = $aTmp[1];
		$dia1 = $aTmp[2];
		
		//defino fecha 2
		$aTmp = explode('-',$fecha2);
		$anio2 = $aTmp[0];
		$mes2 = $aTmp[1];
		$dia2 = $aTmp[2];
		
		//calculo timestam de las dos fechas
		$timestamp1 = mktime(0,0,0,$mes1,$dia1,$anio1);
		$timestamp2 = mktime(0,0,0,$mes2,$dia2,$anio2);
		
		//resto a una fecha la otra
		$segundos_diferencia = $timestamp1 - $timestamp2;
		
		//convierto segundos en días
		$dias_diferencia = $segundos_diferencia / (60 * 60 * 24); 
		
		return $dias_diferencia;
	}

	/**
	 * Retorna el nombre del mes de una fecha
	 * @return string 
	 * @param $dFecha date(d-m-Y)
	 */
	function printDate($dFecha){
		$aFecha = explode('-',$dFecha);
		$aMeses[] = 'Enero';
		$aMeses[] = 'Febrero';
		$aMeses[] = 'Marzo';
		$aMeses[] = 'Abril';
		$aMeses[] = 'Mayo';
		$aMeses[] = 'Junio';
		$aMeses[] = 'Julio';
		$aMeses[] = 'Agosto';
		$aMeses[] = 'Septiembre';
		$aMeses[] = 'Octubre';
		$aMeses[] = 'Noviembre';
		$aMeses[] = 'Diciembre';
		
		$indice = (integer)($aFecha[1]-1);
		$retorno = $aMeses[$indice].' '.$aFecha[0];
		return $retorno;
	}

	/**
	*Funcion que redondea con dos decimales un valor pasado por parametro
	*
	*@author gush
	*@return float
	*@param $valor valor para redondear
	*/
	function redondear($valor){
		$iCifras = $this->getConfigIni('general','cifrasARedondear');
		return round($valor,$iCifras);
	}	

}
?>